'use strict';

const Service = require('egg').Service;

class RedisService extends Service {
  /**
   * 设置值
   * @param {*} key 名称
   * @param {*} value  数值
   * @param {*} seconds 有效期
   */
  async set(key, value, seconds) {
    let { redis } = this.app;
    value = JSON.stringify(value);
    if(!seconds){
      await redis.set(key, value);
    }else{
      // 设置有效时间
      await redis.set(key, value, 'EX', seconds);
    }
  }

  /**
   * 获取
   * @param {*} key 名称
   */
  async get(key) {
    let { redis } = this.app;
    let data = await redis.get(key);
    if (!data) return;
    data = JSON.parse(data);
    return data;
  }

  /**
   * 清空redis
   */
  async flushall() {
    let { redis } = this.app;
    redis.flushall();
    return;
  }

  /**
   * redis 自增
   * @param { String } key 键
   * @param { Number } value 自增的值 
   * @return { Number } 返回递增值
   */
  async incr(key, number=1) {
    const { redis } = this.app
    if (number === 1) {
      return await redis.incr(key)
    } else {
      return await redis.incrby(key, number)
    }
  }

  /**
   * 查询长度
   * @param { String } key
   * @return { Number } 返回数据长度
   */
  async strlen(key) {
    const { redis } = this.app
    return await redis.strlen(key)
  }
}
module.exports = RedisService;

